[Coding038] LeetCode 138

Copy List with Random Pointer

Ben 2024.04.06

More coding records

Get the knowledge flowing and circulating! :)

目录

本题收获

题目:138. Copy List with Random Pointer

A linked list of length n is given such that each node contains an additional random pointer, which could point to any node in the list, or null.

Construct a deep copy of the list. The deep copy should consist of exactly n brand new nodes, where each new node has its value set to the value of its corresponding original node. Both the next and random pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state. None of the pointers in the new list should point to nodes in the original list.

For example, if there are two nodes X and Y in the original list, where X.random --> Y, then for the corresponding two nodes x and y in the copied list, x.random --> y.

Return the head of the copied linked list.

The linked list is represented in the input/output as a list of n nodes. Each node is represented as a pair of [val, random_index] where:

Your code will only be given the head of the original linked list.

Example 1:

img

Example 2:

img

Example 3:

img

Constraints:


代码1(配 · 手绘过程图)

image-20240406220315757

代码解读 | 评价

代码的执行流程:

  • 先看黑色字体部分:在原有的序列相邻的Node之间,新增一个Node(value和前一个Node一样);

  • 再看绿色字体部分:把副本相连起来(非常巧妙 @line34);

  • 然后红色字体部分;

  • 最后橙色字体部分:把原有序列衔接起来 & 把新序列串起来。

复杂度分析

image-20240406220705872